#define Max 3000

typedef struct
{
    struct TreeNode *node;
    unsigned long long index;
}Pair;

int widthOfBinaryTree(struct TreeNode* root){
    if(root==NULL)
        return 0;
    int front=0,tail=0;
    int max=1;  //初始最大宽度为1(不为空的时候)
    int current_width=0;
    struct TreeNode *next_end=NULL;//下一层的末尾节点
    struct TreeNode *cur_end=root;//当前层次的末尾节点
    Pair* queue=(Pair*)malloc(sizeof(Pair)*Max);    //队列
    queue[tail].node=root;
    queue[tail].index=1;
    tail++;
    int k=tail;
    while(tail>front)
    {
        Pair temp=queue[front++];
        if(temp.node->left!=NULL)
        {
            next_end=temp.node->left;
            queue[tail].node=temp.node->left;
            queue[tail].index=2 * temp.index;
            tail++;

        }
        if(temp.node->right!=NULL)
        {
            next_end=temp.node->right;
            queue[tail].node=temp.node->right;
            queue[tail].index=2 * temp.index +1;
            tail++;

        }
        if(temp.node==cur_end)
        {
            current_width=(tail-k) == 0? 0:queue[tail-1].index-queue[k].index+1;
            max=max > current_width ? max:current_width;
            current_width=0;
            k=tail;
            cur_end=next_end;
        }
    }
    return max;
}